Data has become an important asset in almost every application, whether the application is a Line-of-Business application that browses products and generates orders or a Personal Information Management application that schedules meetings. Applications are increasingly becoming data centric—that is, applications plan a significant portion of their design- and run-time experience around querying, manipulating, and presenting data. Many of these applications deal with data that is rich in semantics. Many of today's applications expend significant effort (in procedural code) to preserve the data semantics. While relational models (and systems) have been very successful in data management, they have failed to capture the application data models. Most applications (and application frameworks) roll their own data model on top of relational systems to bridge the impedance mis-match between the data and the application programming environment.
Most applications, whether Line-of-Business, Personal Information Management, or Information Worker-based, require data model concepts like rich structure, relationships, behaviors, and extensibility. Applications also deal with different types of data: relational rows, objects, XML documents, and files. The ultimate goal of data models would be to model application data semantics in a purely declarative fashion, however, to date this has not been possible.